#pragma once

#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include "Common.hpp"
//重定向标准输入，标准输出，标准错误到/dev/null
const std::string dev="/dev/null";
void Daemon(/*int nochdir,int noclose*/)
{
    //1.忽略IO，子进程退出等相关信息
    signal(SIGPIPE,SIG_IGN);
    signal(SIGCHLD,SIG_IGN);    

    //setsid调用要求当前进程不是能进程组的组长
    //2.需要先创建子进程，让父进程直接退出
    if(fork()>0)
        exit(0);
    
    //此时子进程是一个孤儿进程，
    setsid();
    // if(nochdir==0)
    //     chdir("/");
    // if(noclose==0)
    // {
        int fd=::open(dev.c_str(),O_RDWR);
        if(fd<0)
        {
            LOG(FATAL)<<"open "<<dev<<" fail";
            exit(OPEN_ERROR);
        }
        else
        {
            dup2(fd,0);
            dup2(fd,1);
            dup2(fd,2);
            close(fd);
        }
    // }    
    
}